#include <string>
#include <vector>
#include <climits>
#include <iostream>

using namespace std;

/*
给定一个数字 n ，求它的 07 倍数。
正向思维：从 1 倍开始找，一直找到合适的 n 倍。
*/
int times07(int n) {
  /*
  i = 1
  m = 0

  无限循环:
    m = 计算 n 的 i 倍
    如果 m 是 n 的 07 倍数：
      break
    否则:
      i += 1
  
  return m
  */
}

/*
逆向思维：一个个找到所有只由 0 或 7 构成的数字，判断它是不是 n 的倍数。

numbers07 = [
  每一个元素都是一个只由 0 或 7 构成数字
]

for (int n : numbers07) {
  if (n % m == 0) {
    return n
  }
}

不能重复、不能漏掉
1      2     3     4      5       6       7       8 ...          9
0001   0010  0011  0100   0101    0110   0111    1000 二进制      1001
0001   0010  0011  0100   0101    0110   0111    1000 字面十进制   1001
7      70    77    700    707     770    777     7000 ...        7007
7x1    7x10  7x11  7x100  7x101   ...
如何能得到一个只包含 0 或 7 的数字，只有让 7 和一个只包含 0 或 1 的数字相乘
所有只包含 0 或 1 的数字：1. 不能重复；2. 不能遗漏
*/

int times07Fast(int n) {
  
}

// 返回 m 是不是一个只包含 0 和 7 的数字
bool is07Number(int m) {
  // 3702 => [3, 7, 0 , 2]
  // 选择一                              |    选择二
  // 提取 3702 中的每一个数字              ｜    把 m 变成一个字符串 mStr = to_string(m)
  // 只要 m 不等于 0:                     |    for (char c : mStr) {
  //   m % 10 -> 提取末位数字 d           |       如果 c 不是字符 0 也不是字符 7: 
  //   如果 d 不是 0 也不是 7:            ｜           return fasle
  //      return false                  |    return true
  //   m /= 10 -> 从 m 中去掉末位数字
  // return true
}


/*最终目标：在 1 - 50 之间找所有 07 倍数是回文的数字*/

/*
研究1: 一个数字 n，它的 07 倍数是不是唯一的？
研究2: times07(9)
*/
int main(int argc, char const *argv[])
{
  /* code */
  // 777777777 - 1 次无用计算
  cout << times07(9) << endl;
  return 0;
}
